/***************************************************
 @Name :        1196kk0
 @Time :        2025-05-26
 @Email :       2232506563@qq.com
 @Comment :     DMA初始化
 @FileName :    drv_DMA.c
 @Version :     4.0
****************************************************/

#include "drv_DMA.h"

/**************************************
函数名：drv_DMA_Config
函数功能：DMA初始化
输入参数：src:数据源地址  drc:目标地址  size：数据的数量
输出参数：无
其它：
****************************************/
void drv_DMA_Config(uint32_t *src , uint32_t *drc , uint32_t size) //src:数据源地址 drc:目标地址
{
    DMA_InitTypeDef DMA_InitStruct;
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 , ENABLE);

    DMA_InitStruct.DMA_BufferSize = size;                           //需要搬运数据的数量
    DMA_InitStruct.DMA_Channel = DMA_Channel_0;                     //DMA通道
    DMA_InitStruct.DMA_DIR = DMA_DIR_MemoryToMemory;
    DMA_InitStruct.DMA_FIFOMode = DMA_FIFOMode_Disable;
    DMA_InitStruct.DMA_Memory0BaseAddr = (uint32_t)drc;             //目标地址
    DMA_InitStruct.DMA_MemoryBurst = DMA_MemoryBurst_Single;        //单次突发
    DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;    //全字传输
    DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;            //地址自增
    DMA_InitStruct.DMA_Mode = DMA_Mode_Normal;                      //正常模式不使用循环模式

    DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t)src;                  //数据源地址
    DMA_InitStruct.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;        //单次突发
    DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;    //全字传输
    DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Enable;            //源地址自增
    DMA_InitStruct.DMA_Priority = DMA_Priority_High;                        //DMA优先级 高

    DMA_Init(DMA2_Stream0 , &DMA_InitStruct);
    DMA_Cmd(DMA2_Stream0 , ENABLE);
}

// extern uint32_t dma_src[];
// extern uint32_t dma_drc[];
// void drv_DMA_Data_Compare(void)
// {
//     uint8_t i = 0;
//     for ( i = 0; i < 10; i++)
//     {
       
//         if (dma_src [i] != dma_drc[i])
//         {
//             printf("DMA_Data is error! \r\n");
//             return;
//         }
//         else  printf("dma_scr: %x  dma_drc: %x\r\n" , dma_src[i] , dma_drc[i]);
//     }
//     printf("DMA_Data is right! \r\n");
// }






